package org.example.bigwork.util;

import org.example.bigwork.entity.Task;

import java.time.LocalDateTime;
import java.util.Comparator;
import java.util.List;
import java.util.function.Predicate;
import java.util.stream.Collectors;

/**
 * 任务工具类，提供任务过滤、排序等功能
 */
public class TaskUtils {

    /**
     * 按完成状态过滤任务
     * @param tasks 任务列表
     * @param completionStatus 完成状态
     * @return 过滤后的任务列表
     */
    public static List<Task> filterByCompletionStatus(List<Task> tasks, String completionStatus) {
        return tasks.stream()
                .filter(task -> completionStatus.equals(task.getCompletionStatus()))
                .collect(Collectors.toList());
    }
    
    /**
     * 按截止时间排序任务（升序）
     * @param tasks 任务列表
     * @return 排序后的任务列表
     */
    public static List<Task> sortByDeadline(List<Task> tasks) {
        return tasks.stream()
                .sorted(Comparator.comparing(Task::getEndTime, Comparator.nullsLast(Comparator.naturalOrder())))
                .collect(Collectors.toList());
    }
    
    /**
     * 按工作量排序任务（降序）
     * @param tasks 任务列表
     * @return 排序后的任务列表
     */
    public static List<Task> sortByWorkload(List<Task> tasks) {
        return tasks.stream()
                .sorted(Comparator.comparing(Task::getWorkload, Comparator.nullsLast(Comparator.reverseOrder())))
                .collect(Collectors.toList());
    }
    
    /**
     * 获取即将到期的任务（截止时间在指定天数内）
     * @param tasks 任务列表
     * @param days 天数
     * @return 即将到期的任务列表
     */
    public static List<Task> getUpcomingDeadlineTasks(List<Task> tasks, int days) {
        LocalDateTime deadline = LocalDateTime.now().plusDays(days);
        return tasks.stream()
                .filter(task -> {
                    LocalDateTime endTime = task.getEndTime();
                    return endTime != null && 
                           endTime.isAfter(LocalDateTime.now()) && 
                           endTime.isBefore(deadline);
                })
                .collect(Collectors.toList());
    }

} 